package com.example.controller;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import com.example.DatabaseManager;
import com.example.view.MainView;

/**
 * 应用程序控制器
 * 负责应用程序的启动、初始化和全局控制逻辑
 */
public class ApplicationController {
    
    private MainView mainView;
    private DatabaseManager databaseManager;
    
    public ApplicationController() {
        this.databaseManager = new DatabaseManager();
        initializeApplication();
    }
    
    /**
     * 初始化应用程序
     */
    private void initializeApplication() {
        try {
            // 设置系统外观
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            System.err.println("无法设置系统外观: " + e.getMessage());
        }
        
        // 测试数据库连接
        if (!testDatabaseConnection()) {
            showErrorAndExit("数据库连接失败，应用程序无法启动");
            return;
        }
        
        // 创建并显示主视图
        SwingUtilities.invokeLater(() -> {
            mainView = new MainView();
            mainView.display();
        });
        
        // 添加关闭钩子
        Runtime.getRuntime().addShutdownHook(new Thread(this::cleanup));
    }
    
    /**
     * 测试数据库连接
     */
    private boolean testDatabaseConnection() {
        try {
            return databaseManager.testConnection();
        } catch (Exception e) {
            System.err.println("数据库连接测试失败: " + e.getMessage());
            return false;
        }
    }
    
    private void showErrorAndExit(String message) {
        JOptionPane.showMessageDialog(null, 
            message, 
            "启动错误", 
            JOptionPane.ERROR_MESSAGE);
        System.exit(1);
    }
    
    /**
     * 应用程序关闭
     */
    private void cleanup() {
        try {
            if (databaseManager != null) {
                databaseManager.closeDataSource();
            }
            System.out.println("应用程序已正常关闭");
        } catch (Exception e) {
            System.err.println("关闭时发生错误: " + e.getMessage());
        }
    }
    
    /**
     * 获取主视图
     */
    public MainView getMainView() {
        return mainView;
    }
    
    /**
     * 刷新主视图数据
     */
    public void refreshMainView() {
        if (mainView != null) {
            mainView.refreshUserData();
        }
    }
} 